📌 想像你有張「銀行通行證」,只要帶著它銀行就相信你是本人,可以轉帳
CSRF 就像有人在你不知情時,把你帶到銀行櫃檯
利用你沒拔掉的通行證替他轉帳,你本人其實沒有按確認
但因為銀行只看那張通行證,就以為是你授權的動作
找到受害者已登入且會保留 session 的網站
製作一個惡意頁面或郵件,當受害者在已登入狀態下打開時
該頁面自動發送一個「請求」到受害網站
請求帶有受害者的 cookie 或 session
目標伺服器誤以為是真正使用者的操作而執行
Set-Cookie: SameSite=Lax/Strict
,避免跨站點請求攜帶 cookie(Lax 對 GET 有例外,Strict 最嚴)<body onload="document.forms[0].submit()">
<form action="https://bank.example/transfer" method="POST">
<input name="to" value="attacker_account">
<input name="amount" value="1000">
</form>
</body>
受害者若已登入 bank.example
並在同瀏覽器有有效 cookie
這個表單會自動送出,銀行可能會執行轉帳
伺服器在登入時生成 csrf_token
並把它放在 session 中
<form action="/transfer" method="POST">
<input name="to" value="someone">
<input name="amount" value="100">
<input type="hidden" name="csrf_token" value="RANDOM_SERVER_TOKEN">
<button>Transfer</button>
</form>
伺服器收到 POST 時檢查 csrf_token
是否與 session 中一致
📌 跨站請求偽造(CSRF)利用瀏覽器會自動帶上 cookie 的特性
讓攻擊者在受害者不知情下發起對受信任網站的請求
而達成未經授權的狀態變更或金融詐騙
防禦在於「伺服器端不信任單靠 cookie 的請求」
採用 CSRF token、嚴謹的 cookie 屬性(HttpOnly)
📌 日誌監控能在攻擊發生時快速偵測與緩解